<?php
namespace Amis\dataviewer;

use Amis\form\Badge;
use Amis\Basics\AmisBasics;

/**
 * 表格展示，不支持配置初始化接口初始化数据域，所以需要搭配类似像Service这样的，具有配置接口初始化数据域功能的组件，
 * 或者手动进行数据域初始化，然后通过source属性，获取数据链中的数据，完成数据展示。
 */
class Table extends AmisBasics
{
    public string $type = 'table';

    /**
     * 外层 CSS 类名
     * @param string $className
     * @return $this
     */
    public function className(string $className = 'panel-default	')
    {
        $this->className = $className;
        return $this;
    }

    /**
     * 标题
     * @param string $title
     * @return $this
     */
    public function title(string $title)
    {
        $this->title = $title;
        return $this;
    }

    /**
     * 数据源, 绑定当前环境变量
     * @param string $source
     * @return $this
     */
    public function source(string $source = '${items}')
    {
        $this->source = $source;
        return $this;
    }

    /**
     * 是否固定表头
     * @param bool $affixHeader
     * @return $this
     */
    public function affixHeader(bool $affixHeader = true)
    {
        $this->affixHeader = $affixHeader;
        return $this;
    }

    /**
     * 展示列显示开关, 自动即：列数量大于或等于 5 个时自动开启
     * auto 或者 boolean
     * @param string $IsAuto
     * @return $this
     */
    public function columnsTogglable(string $IsAuto)
    {
        $this->columnsTogglable = $IsAuto;
        return $this;
    }

    /**
     * 当没数据的时候的文字提示
     * @param string $placeholder
     * @return $this
     */
    public function placeholder(string $placeholder = '暂无数据')
    {
        $this->placeholder = $placeholder;
        return $this;
    }

    /**
     * 表格 CSS 类名
     * @param string $tableClassName
     * @return $this
     */
    public function tableClassName(string $tableClassName = 'table-db table-striped')
    {
        $this->tableClassName = $tableClassName;
        return $this;
    }

    /**
     * 顶部外层 CSS 类名
     * @param string $headerClassName
     * @return $this
     */
    public function headerClassName(string $headerClassName = 'Action.md-table-header')
    {
        $this->headerClassName = $headerClassName;
        return $this;
    }

    /**
     * 底部外层 CSS 类名
     * @param string $footerClassName
     * @return $this
     */
    public function footerClassName(string $footerClassName = 'Action.md-table-footer')
    {
        $this->footerClassName = $footerClassName;
        return $this;
    }

    /**
     * 工具栏 CSS 类名
     * @param string $toolbarClassName
     * @return $this
     */
    public function toolbarClassName(string $toolbarClassName = 'Action.md-table-toolbar')
    {
        $this->toolbarClassName = $toolbarClassName;
        return $this;
    }

    /**
     * 用来设置列信息
     * @param array|string $columns
     * @return $this
     */
    public function columns(array $columns)
    {
        $this->columns = $columns;
        return $this;
    }

    /**
     * 自动合并单元格
     * @param int $combineNum
     * @return $this
     */
    public function combineNum(int $combineNum)
    {
        $this->combineNum = $combineNum;
        return $this;
    }

    /**
     * 悬浮行操作按钮组
     * @param array $itemActions
     * @return $this
     */
    public function itemActions(array $itemActions)
    {
        $this->itemActions = $itemActions;
        return $this;
    }

    /**
     * 配置当前行是否可勾选的条件，要用 表达式
     * @param string $itemCheckableOn
     * @return $this
     */
    public function itemCheckableOn(string $itemCheckableOn)
    {
        $this->itemCheckableOn = $itemCheckableOn;
        return $this;
    }

    /**
     * 配置当前行是否可拖拽的条件，要用 表达式
     * @param string $itemDraggableOn
     * @return $this
     */
    public function itemDraggableOn(string $itemDraggableOn)
    {
        $this->itemDraggableOn = $itemDraggableOn;
        return $this;
    }

    /**
     * 点击数据行是否可以勾选当前行
     * @param bool $checkOnItemClick
     * @return $this
     */
    public function checkOnItemClick(bool $checkOnItemClick = false)
    {
        $this->checkOnItemClick = $checkOnItemClick;
        return $this;
    }

    /**
     * 给行添加 CSS 类名
     * @param string $rowClassName
     * @return $this
     */
    public function rowClassName(string $rowClassName)
    {
        $this->rowClassName = $rowClassName;
        return $this;
    }

    /**
     * 通过模板给行添加 CSS 类名
     * @param string $rowClassNameExpr
     * @return $this
     */
    public function rowClassNameExpr(string $rowClassNameExpr)
    {
        $this->rowClassNameExpr = $rowClassNameExpr;
        return $this;
    }

    /**
     * 顶部总结行
     * @param array $prefixRow
     * @return $this
     */
    public function prefixRow(array $prefixRow)
    {
        $this->prefixRow = $prefixRow;
        return $this;
    }

    /**
     * 底部总结行
     * @param array $affixRow
     * @return $this
     */
    public function affixRow(array $affixRow)
    {
        $this->affixRow = $affixRow;
        return $this;
    }

    public function itemBadge(Badge $itemBadge)
    {
        $this->itemBadge = $itemBadge;
        return $this;
    }

    /**
     * 内容区域自适应高度
     * @param bool $autoFillHeight
     * @return $this
     */
    public function autoFillHeight(bool $autoFillHeight)
    {
        $this->autoFillHeight = $autoFillHeight;
        return $this;
    }
}